Usando o Audacity, ou outro programa de ĂĄudio, grave arquivos com:
Carregando ĂĄudios gravados
# Nomes dos arquivos gravados
audio1 = 'Entre_Leva_Catia_Falada.wav'
audio2 = 'RA21017414.wav'
audio3 = 'Burrinho_GabrielFerreiraProdi.wav'
audio4 = 'Camoes_GabrielFerreiraProdi.wav'
#from google.colab import drive
#drive.mount('/content/drive')
import numpy as np
import matplotlib.pyplot as plt
import librosa
import librosa.display
import IPython.display
import os
#os.chdir("/content/drive/MyDrive/ColabCSM")
print(audio2)
v2, sr2 = librosa.load(audio2)
IPython.display.Audio(data=v2, rate=sr2)
RA21017414.wav
print(audio3)
v3, sr3 = librosa.load(audio3)
IPython.display.Audio(data=v3, rate=sr3)
Burrinho_GabrielFerreiraProdi.wav
print(audio4)
v4, sr4 = librosa.load(audio4)
IPython.display.Audio(data=v4, rate=sr4)
Camoes_GabrielFerreiraProdi.wav
#OBS.: insira nome do arquivo WAV
print(audio1)
v1 , sr1 = librosa.load(audio1)
print(type(v1), type(sr1))
print(v1.shape, sr1)
# Player serå aberto! AGUARDE até abrir!
IPython.display.Audio(data=v1, rate=sr1)
Entre_Leva_Catia_Falada.wav <class 'numpy.ndarray'> <class 'int'> (292805,) 22050
plt.figure()
fig, ax = plt.subplots(figsize=(15, 5))
librosa.display.waveplot(v1, sr=sr1)
plt.title('Voz da Catia' + audio1)
Text(0.5, 1.0, 'Voz da CatiaEntre_Leva_Catia_Falada.wav')
<Figure size 432x288 with 0 Axes>
print('FrequĂȘncia de Amostragem', sr1)
FrequĂȘncia de Amostragem 22050
fa = sr1
print(fa)
22050
Ts = 0.04 # Tempo de duração do segmento em segundos
Nj = int(Ts*fa) # NĂșmero de pontos da Janela
print('Tamanho do Segmento', Nj)
Tamanho do Segmento 882
Nseg = int(len(v1)/Nj)
Nover = int(Nj*0.5)
print('NĂșmero de Segmentos no Arquivo', Nseg, '. Pontos Soprepostos', Nover )
NĂșmero de Segmentos no Arquivo 331 . Pontos Soprepostos 441
from scipy import signal
hm = signal.get_window('hamming', Nj)
plt.plot(hm); plt.title('Janela de Hamming')
Text(0.5, 1.0, 'Janela de Hamming')
Nover = int(Nj*0.5)
Nseg = int(len(v1)/Nj)
E = []
for l in range(1, Nseg):
xjan = v1[(l-1)*Nj+Nover:l*Nj+Nover]*hm
x2 = list(np.array(xjan**2))
aux = sum(x2)/Nj
E.append(aux)
E = 10*np.log10(E)
Emin = np.min(E) # calcula nĂvel de ruĂdo de fundo
plt.figure
fig, ax = plt.subplots(figsize=(15, 3))
plt.plot(E - Emin)
plt.title('Energia da Voz' + audio1)
plt.ylabel('Energia[db]'); plt.xlabel('Segmento')
Text(0.5, 0, 'Segmento')
Determine o Contorno de Energia para trĂȘs arquivos que vocĂȘs gravaram:
# Definindo função para realizar todo o processamento
def contorno_energia(audio_nome):
v1, sr1 = librosa.load(audio_nome)
fa = sr1
Ts = 0.04 # Tempo de duração do segmento em segundos
Nj = int(Ts*fa) # NĂșmero de pontos da Janela
Nseg = int(len(v1)/Nj)
Nover = int(Nj*0.5)
hm = signal.get_window('hamming', Nj)
Nover = int(Nj*0.5)
Nseg = int(len(v1)/Nj)
E = []
for l in range(1, Nseg):
xjan = v1[(l-1)*Nj+Nover:l*Nj+Nover]*hm
x2 = list(np.array(xjan**2))
aux = sum(x2)/Nj
E.append(aux)
E = 10*np.log10(E)
Emin = np.min(E) # calcula nĂvel de ruĂdo de fundo
plt.figure
fig, ax = plt.subplots(figsize=(15, 3))
plt.plot(E - Emin)
plt.title('Energia da Voz ' + audio_nome)
plt.ylabel('Energia[db]'); plt.xlabel('Segmento')
plt.savefig('1_' + audio_nome + ".png", bbox_inches='tight')
contorno_energia(audio2)
contorno_energia(audio3)
contorno_energia(audio4)
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 8))
D = librosa.amplitude_to_db(np.abs(librosa.stft(v1)), ref=np.max)
fig, ax = plt.subplots(figsize=(15, 10))
librosa.display.specshow(D, x_axis='time',y_axis='linear')
plt.colorbar(format='%+2.0f dB')
plt.title('PotĂȘncia e Espectrograma Linear na FrequĂȘncia'+ audio1)
Text(0.5, 1.0, 'PotĂȘncia e Espectrograma Linear na FrequĂȘnciaEntre_Leva_Catia_Falada.wav')
<Figure size 864x576 with 0 Axes>
Faça os espectrogramas para os arquivos que vocĂȘs gravaram e calculem o contorno de energia:
# Definindo função para realizar todo o processamento
def espectrograma(audio_nome):
v1, sr1 = librosa.load(audio_nome)
plt.figure(figsize=(12, 8))
D = librosa.amplitude_to_db(np.abs(librosa.stft(v1)), ref=np.max)
fig, ax = plt.subplots(figsize=(15, 10))
librosa.display.specshow(D, x_axis='time',y_axis='linear')
plt.colorbar(format='%+2.0f dB')
plt.title('PotĂȘncia e Espectrograma Linear na FrequĂȘncia'+ audio_nome)
plt.savefig('2_' + audio_nome + ".png", bbox_inches='tight')
espectrograma(audio2)
espectrograma(audio3)
espectrograma(audio4)
<Figure size 864x576 with 0 Axes>
<Figure size 864x576 with 0 Axes>
<Figure size 864x576 with 0 Axes>
# Segmente um fonema que tenha Pitch, p.ex "En" de "Entre"
v1En = v1[4000:16000]
IPython.display.Audio(data=v1En, rate=sr1)
from matplotlib.ticker import (MultipleLocator, FormatStrFormatter, AutoMinorLocator)
acEn = librosa.autocorrelate(v1En, max_size= sr1/32)
fig, ax = plt.subplots(figsize=(15, 5))
ax.xaxis.set_major_locator(MultipleLocator(1))
y1 = acEn[1:400]
x1 = range(len(y1))
xx = [i*1000/sr1 for i in x1]
plt.grid(True)
ax.plot(xx,y1)
plt.title('Auto-correlação 1')
plt.xlabel('tempo em [ms]')
plt.show()
O PerĂodo de Pitch ($T_{0}$) serĂĄ o intervalo entre picos sucessivos
($T_{0}$) = 3.5 ms
A FrequĂȘncia Fundamental ($f_0$) serĂĄ o inverso do periĂłdo de Pitch
($f_0$) =~ 288 Hz
# Segmente outro fonema que tenha Pitch, p.ex "Ag" de "Agora"
v1A = v1[48000:56000]
IPython.display.Audio(data=v1A, rate=sr1)
acA = librosa.autocorrelate(v1A, max_size= sr1/32)
fig, ax2 = plt.subplots(figsize=(15, 5))
ax2.xaxis.set_major_locator(MultipleLocator(1))
y2 = acA[1:500]
x2 = range(len(y2))
xx2 = [i*1000/sr1 for i in x2]
plt.grid(True)
ax2.plot(xx2,y2)
plt.title('Auto-correlação 2')
plt.xlabel('tempo em [ms]')
plt.show()
Determine o PerĂodo de Pitch e a Fundamental desta vogal.
O PerĂodo de Pitch ($T_{0}$) serĂĄ o intervalo entre picos sucessivos
($T_{0}$) = 4.5 ms
A FrequĂȘncia Fundamental ($f_0$) serĂĄ o inverso do periĂłdo de Pitch
($f_0$) =~ 222 Hz
Determine o Pitch e a $f_0$ da vogais que desejarem dos seus arquivos, para as versÔes:
def auto_correlacao(ini, fim, audio_nome, fonema_nome):
v1, sr1 = librosa.load(audio_nome)
v1A = v1[ini:fim]
acA = librosa.autocorrelate(v1A, max_size= sr1/32)
fig, ax2 = plt.subplots(figsize=(15, 5))
ax2.xaxis.set_major_locator(MultipleLocator(1))
y2 = acA[1:500]
x2 = range(len(y2))
xx2 = [i*1000/sr1 for i in x2]
plt.grid(True)
ax2.plot(xx2,y2)
plt.title('Auto-correlação '+audio_nome+" "+fonema_nome)
plt.xlabel('tempo em [ms]')
plt.show()
plt.savefig('3_'+audio_nome + ".png", bbox_inches='tight')
def plot_audio(audio_nome):
v1, sr1 = librosa.load(audio_nome)
plt.figure()
fig, ax = plt.subplots(figsize=(15, 5))
librosa.display.waveplot(v1, sr=sr1)
plt.title(audio_nome)
plot_audio(audio2)
<Figure size 432x288 with 0 Axes>
# "Do" do nĂșmero "Dois"
ini = 52000
fim = 56000
v2, sr2 = librosa.load(audio2)
v2A = v2[ini:fim]
IPython.display.Audio(data=v2A, rate=sr2)
# "Do" do nĂșmero "Dois"
auto_correlacao(ini, fim, audio2, "'Do' do nĂșmero 'Dois'")
<Figure size 432x288 with 0 Axes>
PerĂodo de Pitch e a Fundamental - "Do" do nĂșmero "Dois"
O PerĂodo de Pitch ($T_{0}$) serĂĄ o intervalo entre picos sucessivos
($T_{0}$) = 6.0 ms
A FrequĂȘncia Fundamental ($f_0$) serĂĄ o inverso do periĂłdo de Pitch
($f_0$) =~ 167 Hz
plot_audio(audio3)
<Figure size 432x288 with 0 Axes>
# "ga" da palavra "folgado"
ini = 131000
fim = 135000
v3, sr3 = librosa.load(audio3)
v3A = v3[ini:fim]
IPython.display.Audio(data=v3A, rate=sr3)
# "ga" da palavra "folgado"
auto_correlacao(ini, fim, audio3, "'ga' da palavra 'folgado'")
<Figure size 432x288 with 0 Axes>
PerĂodo de Pitch e a Fundamental - "ga" da palavra "folgado"
O PerĂodo de Pitch ($T_{0}$) serĂĄ o intervalo entre picos sucessivos
($T_{0}$) = 6.0 ms
A FrequĂȘncia Fundamental ($f_0$) serĂĄ o inverso do perĂodo de Pitch
($f_0$) =~ 167 Hz
plot_audio(audio4)
<Figure size 432x288 with 0 Axes>
# "a" da palavra "alegre"
ini = 286000
fim = 288000
v4, sr4 = librosa.load(audio4)
v4A = v4[ini:fim]
IPython.display.Audio(data=v4A, rate=sr4)
# "a" da palavra "alegre"
auto_correlacao(ini, fim, audio3, "'a' da palavra 'alegre'")
<Figure size 432x288 with 0 Axes>
PerĂodo de Pitch e a Fundamental - "a" da palavra "alegre"
O PerĂodo de Pitch ($T_{0}$) serĂĄ o intervalo entre picos sucessivos
($T_{0}$) = 8.8 ms
A FrequĂȘncia Fundamental ($f_0$) serĂĄ o inverso do perĂodo de Pitch
($f_0$) = 113.6 Hz
# AUDIO DE "En" em v1En
f, Pxx_spec = signal.periodogram(v1En, fa, 'flattop', scaling='spectrum')
lf = len(f)
fig, AX = plt.subplots(figsize=(15, 5))
AX.xaxis.set_major_locator(MultipleLocator(100))
AX.plot(f[:int(lf/4)], 10*np.log10(np.sqrt(Pxx_spec[:int(lf/4)])))
plt.xlabel('FrequĂȘncia [Hz]')
plt.ylabel('Log-spectro [dB]')
plt.title('Espectro da Vogal /En/ de <Entre> de '+audio1)
plt.grid(True)
plt.show()
$f_1$ = 250 Hz $f_2$ = 500 Hz $f_3$ = 750 Hz $f_4$ = 1000 Hz
Determine as formantes das vogais dos arquivos que vocĂȘs calcularam os espectrogramas
# Definindo funçÔes
def formantes(v1A, sr1, audio_nome):
f, Pxx_spec = signal.periodogram(v1A, sr1, 'flattop', scaling='spectrum')
lf = len(f)
fig, AX = plt.subplots(figsize=(15, 5))
AX.xaxis.set_major_locator(MultipleLocator(100))
AX.plot(f[:int(lf/4)], 10*np.log10(np.sqrt(Pxx_spec[:int(lf/4)])))
plt.xlabel('FrequĂȘncia [Hz]')
plt.ylabel('Log-spectro [dB]')
plt.title('Espectro da Vogal de '+audio_nome)
plt.grid(True)
plt.show()
plt.savefig('4_'+audio_nome + ".png", bbox_inches='tight')
#"Do" do nĂșmero "Dois"
formantes(v2A, sr2, audio2)
<Figure size 432x288 with 0 Axes>
$f_1$ = 980 Hz $f_2$ = 1150 Hz $f_3$ = 2480 Hz $f_4$ = 2600 Hz
# "ga" da palavra "folgado"
formantes(v3A, sr3, audio3)
<Figure size 432x288 with 0 Axes>
$f_1$ = 1070 Hz $f_2$ = 1510 Hz $f_3$ = 2280 Hz $f_4$ = 3050 Hz (fora do grĂĄfico, observado com auxĂlio do Audacity)
# "a" da palavra "alegre"
formantes(v4A, sr4, audio4)
<Figure size 432x288 with 0 Axes>
$f_1$ = 460 Hz $f_2$ = 620 Hz $f_3$ = 2330 Hz $f_4$ = 3077 Hz (fora do grĂĄfico, observado com auxĂlio do Audacity)
Usando alguns de seus arquivos, no espectrograma, determine algumas consoantes e em especial as plosivas
Utilizando o Audacity, determinei os intervalos que continham as consoantes desejadas
print(audio4)
v4, sr4 = librosa.load(audio4)
IPython.display.Audio(data=v4, rate=sr4)
Camoes_GabrielFerreiraProdi.wav
# Selecionando os 4 primeiros segundos do audio CamÔes
v4, sr4 = librosa.load(audio4)
#v4 = v4[:sr4*4]
# Plotando Espectrograma
plt.figure(figsize=(20, 8))
D = librosa.amplitude_to_db(np.abs(librosa.stft(v4)), ref=np.max)
fig, ax = plt.subplots(figsize=(20, 6))
librosa.display.specshow(D, x_axis='time',y_axis='linear')
plt.colorbar(format='%+2.0f dB')
plt.title('PotĂȘncia e Espectrograma Linear na FrequĂȘncia '+ audio4)
# Linhas nas regiÔes de consoantes
# "C de Campos"
plt.axvline(x=5.475, ymin=0, ymax=1, color="red", lw=0.8,label="C de Campos")
plt.axvline(x=5.507, ymin=0, ymax=1, color="red", lw=0.8)
# "P de Campos"
plt.axvline(x=5.753, ymin=0, ymax=1, color="green", lw=0.8, label="P de Campos")
plt.axvline(x=5.776, ymin=0, ymax=1, color="green", lw=0.8)
# "T de Tornai-vos"
plt.axvline(x=7.656, ymin=0, ymax=1, color="white", lw=0.8, label="T de Tornai-vos")
plt.axvline(x=7.680, ymin=0, ymax=1, color="white", lw=0.8)
# "V de Tornai-vos"
plt.axvline(x=8.205, ymin=0, ymax=1, color="yellow", lw=0.8, label="V de Tornai-vos")
plt.axvline(x=8.274, ymin=0, ymax=1, color="yellow", lw=0.8)
# "G de Agora"
plt.axvline(x=8.661, ymin=0, ymax=1, color="orange", lw=0.8, label="G de Agora")
plt.axvline(x=8.693, ymin=0, ymax=1, color="orange", lw=0.8)
#plt.legend()
plt.legend(bbox_to_anchor=(1, 1), loc=4, borderaxespad=0.)
plt.savefig('5_'+audio4 + ".png", bbox_inches='tight')
<Figure size 1440x576 with 0 Axes>